//
//  StatusViewModel.swift
//  新浪微博
//
//  Created by MBP on 16/5/19.
//  Copyright © 2016年 MBP. All rights reserved.
//

import UIKit

// 常量控件属性的结构体
struct StatusCellLayout {
    // 控件间距
    let margin: CGFloat = 12
    // 小图间距
    let picturesMargin: CGFloat = 2
    // 配图控件的宽度
    let picturesViewWidth: CGFloat
    // 每行的图片数量
    let linePicturesCount: CGFloat = 3
    // 小图宽高(宽高一致)
    let pictureHW: CGFloat
    // 图片尺寸
    let pictureSize: CGSize
    
    init() {
        picturesViewWidth = UIScreen.mainScreen().bounds.width - 2 * margin
        pictureHW = (picturesViewWidth - (linePicturesCount - 1) * picturesMargin) / linePicturesCount
        pictureSize = CGSize(width: pictureHW, height: pictureHW)
    }
    
}

/// 全局的微博 Cell 的布局信息结构体
let PNStatusCellLayout = StatusCellLayout()

class StatusViewModel: CustomStringConvertible {
    
    //微博模型
    var status: Status
    
    // 将模型中 需要计算的逻辑代码 封装再次, 直接提供给原创cell 可用数据
    /// 会员图标
    var userMemberImage: UIImage?
    /// 认证图标
    var userVipImage: UIImage?
    
    /// 来源字符串
    var sourceText: String?
    /// 创建日期
    var createTime: NSDate?
    
    // MARK: - 配图视图，默认无大小
    var picturesViewSize = CGSizeZero
    
    //初始化微博模型
    init(status: Status) {
        self.status = status
        
        //计算用户数据
        createUserData()
        
        //计算微博数据
        createStatusData()
        
        //返回图片大小
        picturesViewSize = calcPircturesViewSize(status.pic_urls)
    }
    
    
    //判断图片数量的, 根据不同结果, 返回图片的展示尺寸
    private func calcPircturesViewSize(pic_urls: [StatusPictures]?) -> CGSize {
        //判断图片数量
        let count = pic_urls?.count ?? 0
        
        if count == 0 {
            return CGSizeZero
        }
        
        //MARK: 定义常量
        // 行数, 此处的类型转换/运算符的添加务必注意
        let lineCount = CGFloat((count - 1) / Int(PNStatusCellLayout.linePicturesCount) + 1)
        // 配图控件的高度
        let picturesViewHeight = lineCount * PNStatusCellLayout.pictureSize.height + (lineCount - 1) * PNStatusCellLayout.picturesMargin
        
        
        return CGSize(width: PNStatusCellLayout.picturesViewWidth, height: picturesViewHeight)
    }
    
    //返回描述信息
    var description: String {
        return status.description
    }
    
    //准备好用户数据
    private func createUserData() {
        // 会员图标
        if status.user?.mbrank > 0 && status.user?.mbrank < 7 {
            userMemberImage = UIImage(named: "common_icon_membership_level\(status.user!.mbrank)")
        }
        
        // 认证图标 -1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
        switch status.user?.verified_type ?? -1 {
        case 0: userVipImage = UIImage(named: "avatar_vip")
        case 2, 3, 5: userVipImage = UIImage(named: "avatar_enterprise_vip")
        case 220: userVipImage = UIImage(named: "avatar_grassroot")
        default: break
        }
    }
    
    //准备好微博数据
    private func createStatusData() {
        //拼接来源字符串
        if let source = status.source,
            startIndex = source.rangeOfString("\">")?.endIndex,
            endIndex = source.rangeOfString("</a>")?.startIndex {
            
            //组合字符串
            sourceText = "来自 " + source.substringWithRange(startIndex..<endIndex)
        }
        // 创建日期
        createTime = NSDate.pn_sinaDate(status.created_at)
    }
}